/* 3DGo Game
 * Copyright (C) 2008 Roman Hwang, Eugene Melnichek

 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation - version 2
 * of the License.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 */

#include "Pipe.h"

/////////////////////////////////////////////////////////////////////

Pipe::Pipe()
{
	Create();
}

/////////////////////////////////////////////////////////////////////

Pipe::~Pipe()
{
	Close();
}

/////////////////////////////////////////////////////////////////////

bool Pipe::Create()
{
	// Initialize security attributes
	SECURITY_ATTRIBUTES saAttr;
	saAttr.nLength = sizeof(SECURITY_ATTRIBUTES); 
	saAttr.bInheritHandle = TRUE; 
	saAttr.lpSecurityDescriptor = NULL; 

	// Create pipe
	if (CreatePipe(&m_readEnd, &m_writeEnd, &saAttr, 0))
		return false;

	return true;
}

/////////////////////////////////////////////////////////////////////

void Pipe::Close()
{
	CloseHandle(m_readEnd);
	CloseHandle(m_writeEnd);
}

/////////////////////////////////////////////////////////////////////

bool Pipe::Read(LPVOID _buffer, int _bufferSize, LPDWORD _readSize)
{
	return ReadFile(m_readEnd, _buffer, _bufferSize, _readSize, 0);
}

/////////////////////////////////////////////////////////////////////

bool Pipe::Write(LPVOID _buffer, int _bufferSize)
{
	DWORD dummy;
	return WriteFile(m_writeEnd, _buffer, _bufferSize, &dummy, 0);
}

/////////////////////////////////////////////////////////////////////
